#define DEBUG
#include <cstdio>

using namespace std;

typedef long long ll;

const int maxn=500, maxp=1000, maxq=1000, inf=0x7ffffff, maxc=1000000;

int min(int a, int b) {
  return a<b ? a : b;
}

class Net {
public:
  static const int maxm=maxn*2+maxq*2+maxp*9;
  int n, m, dis[maxn+3], gap[maxn+3];
  ll val[maxn+3][maxn+3];
  bool full;

  void init(int n) {
    this->n = n;
    full = false;
    for (int i=1; i<=n; i++) {
      for (int j=1; j<=n; j++) {
        val[i][j] = 0;
      }
      dis[i] = gap[i] = 0;
    }
    gap[0] = n;
  }

  void add(int u, int v, ll w) {
    val[u][v]+=w;
  }

  ll run(int o, int t, ll flow) {
    if (o==t) {
      return flow;
    }
    ll have=0;
    for (int i=1; i<=n; i++) {
      if (val[o][i] && dis[i]+1==dis[o]) {
        ll temp=run(i, t, min(flow-have, val[o][i]));
        val[o][i]-=temp, val[i][o]+=temp, have+=temp;
        if (full || flow==have) return have;
      }
    }
    if (!(--gap[dis[o]])) {
      full = true;
    }
    gap[++dis[o]]++;
    return have;
  }
};

int main() {
  freopen("variable.in", "r", stdin);
  freopen("variable.out", "w", stdout);

  static Net g;
  int t, n, w, p, q;
  scanf("%d", &t);
  for (int ti=1; ti<=t; ti++) {
    scanf("%d %d %d %d", &n, &w, &p, &q);
    g.init(n+2);
    for (int i=1; i<=n; i++) {
      g.add(1, i+2, 1+maxc);
      g.add(i+2, 2, -1+maxc);
    }

    for (int i=1; i<=p; i++) {
      int x, y, z, a, b, c, d, e, f;
      scanf("%d %d %d %d %d %d %d %d %d", &x, &y, &z, &a, &b, &c, &d, &e, &f);
      g.add(x+2, y+2, 2*a);
      g.add(y+2, x+2, 2*a);
      g.add(y+2, z+2, 2*b);
      g.add(z+2, y+2, 2*b);
      g.add(z+2, x+2, 2*c);
      g.add(x+2, z+2, 2*c);
      g.add(1, x+2, d-f);
      g.add(x+2, 2, f-d);
      g.add(1, y+2, e-d);
      g.add(y+2, 2, d-e);
      g.add(1, z+2, f-e);
      g.add(z+2, 2, e-f);
    }

    for (int i=1; i<=q; i++) {
      int x, y, r;
      scanf("%d %d %d", &x, &y, &r);
      if (r==0) {
        g.add(y+2, x+2, inf);
      } else if (r==1) {
        g.add(x+2, y+2, inf);
        g.add(y+2, x+2, inf);
      } else {
        g.add(1, x+2, inf);
        g.add(y+2, 2, inf);
      }
    }

    ll ans=0;
    for (; !g.full; ans+=g.run(1, 2, inf));
    printf("%lld\n", (ans-n*maxc)*w);
  }

  fclose(stdin);
  fclose(stdout);
  return 0;
}
